package javaBase.javaInstanceof;

public class Test {
	/*上面定义了两个员工和一个普通人，虽然他们同名，但是他们肯定不是同一人，所以按理来说输出结果应该全部
	都是 false，但是事与愿违，结果是：true、true、false。
	对于那 e1!=e2 我们非常容易理解，因为他们不仅需要比较 name,还需要比较 ID。但是 p1 即等于 e1 也等于 e
	2，这是非常奇怪的，因为 e1、e2 明明是两个不同的类，但为什么会出现这个情况？首先 p1.equals(e1)，是调
	用 p1 的 equals 方法，该方法使用 instanceof 关键字来检查 e1 是否为 Person 类，这里我们再看看 instance
	of：判断其左边对象是否为其右边类的实例，也可以用来判断继承中的子类的实例是否为父类的实现。他们两者
	存在继承关系，肯定会返回 true 了，而两者 name 又相同，所以结果肯定是 true。
	所以出现上面的情况就是使用了关键字 instanceof，这是非常容易“专空子”的。故在覆写 equals 时推荐使用
	getClass 进行类型判断。而不是使用 instanceof*/
	public static void main(String[] args) {
		Employee e1 = new Employee("chenssy", 23);
		Employee e2 = new Employee("chenssy", 24);
		Person p1 = new Person("chenssy");
		System.out.println(p1.equals(e1));
		System.out.println(p1.equals(e2));
		System.out.println(e1.equals(e2));
	}
}
